package com.asa.a;

/**
 * 本地方法库
 * 本地方法接口
 * 本地方法栈
 * @author Administrator
 *
 */
public class H {

	/**
	 * 什么是本地方法?
		简单地讲，一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由悲Java语言实现，
		比如c。这个特征并非Java所特有，很多其它的编程语言都有一机制，比如在C++中，你可以用extern "c”告知C++编译器去调用一个c的函数。
		"A native method is a Java method whose implementation isprovided by non-java code . "
		在定义一个native method时，并不提供实现体（有些像定义一个Javainterface)，因为其实现体是由非java语言在外面实现的。
		本地接口的作用是融合不同的编程语言为Java所用，它的初衷是融合C/C++程序。
		
		为什么要使用Native Method ?
			Java使用起来非常方便，然而有些层次的任务用Java家现起来不容易，或者我们对程序的效率很在意时，问题就来了。
			
			与Java环境外交互:
			有时Java应用需要与Java外面的环境交互，这是本地方法存在的主要原因。你可以想想Java需要与一些底层系统，如操作系统或某些硬
			件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解Java应用之外的繁琐的细节。


		本地方法栈(Native Method Stack)

			Java虚拟机栈用于管理Java方法的调用，而本地方法栈用于管理本地方法的调用。|
			a
			本地方法栈，也是线程私有的。
			允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)
			如果线程请求分配的栈容量超过本地方法栈允许的最大容量，Java虚拟机将会抛出一个 stackoverflowError异常。
			如果本地方法栈可以动态扩展，并且在尝试扩展的时候无法申请到足够的内存,或耆在创建新的线程时没有足够的内存去创建对应的本地方法栈，那么Java虚拟机将会抛出一个outofMemoryError异常。
			本地方法是使用c语言实现的。
			它的具体做法是Native Method stack中登记native方法，在Execution Engine执行时加载本地方法库。


		当某个线程调用一个本地方法时，它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限。
			>本地方法可以通过本地方法接口来访问虚拟机内部的运往数据区。
			>它甚至可以直接使用本地处理器中的寄存器
			>直接从本地内存的堆中分配任意数量的内存。
		并不是所有的JVM都支持本地方法。因为Java虚拟机规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。如果JVM产品不打算支持native方法，也可以无需实现本地方法栈。
		在Hotspot JVM中，直接将本地方法栈和虚拟机栈合二为一。




	 */
	
	
	
	
	
}
